/*
【题目描述】
求两个不超过200位的非负整数的和。

【输入】
有两行，每行是一个不超过200位的非负整数，可能有多余的前导0。

【输出】
一行，即相加后的结果。结果里不能有多余的前导0，即如果结果是342，那么就不能输出为0342。

【输入样例】
22222222222222222222
33333333333333333333
【输出样例】
55555555555555555555
*/

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>

using namespace std;

int main()
{
	string a, b, c;
	cin >> a >> b;
	
	size_t alen = a.length();
	size_t blen = b.length();
	size_t n = std::max(alen, blen);
	c.resize(n+1, '0');
	//cout << c << endl;
	for(int i=0; i<n; ++i) {
		int m=0, n=0, sum=0;
		m = i>=alen ? 0 : a[alen-i-1] - '0';
		n = i>=blen ? 0 : b[blen-i-1] - '0';
		sum = m + n + c[i] - '0';
		c[i] = sum % 10 + '0';
		c[i+1] = sum / 10 + '0';
	}
	reverse(c.begin(), c.end());
	while(c[0]=='0') {
		c.erase(c.begin());
	}
	cout << c << endl;
	return 0;
}

//void strim(string& s) {
//	for(size_t i=0; i<s.length(); ++i) {
//		if( s[i] != '0') {
//			if( i > 0 ) {
//				s.erase(0, i);
//			}
//			break;
//		}
//	}
//}
//
//int main()
//{
//	string s1, s2;
//	cin >> s1 >> s2;
//	strim(s1);
//	strim(s2);
//	string result;
//	int a, b, c=0;
//	auto it1 = s1.rbegin();
//	auto it2 = s2.rbegin();
//	while( it1 != s1.rend() || it2 != s2.rend() ) {
//		a = b = 0;
//		if( it1 != s1.rend()) {
//			a = *it1 - '0';
//			it1++;
//		}
//		if( it2 != s2.rend()) {
//			b = *it2 - '0';
//			it2++;
//		}
//		a = a + b + c;
//		c = a / 10;
//		a = a % 10;
//		result.insert(result.begin(), a + '0');
//	}
//	
//	if(c>0) {
//		result.insert(result.begin(), c + '0');
//	}
//	cout << result << endl;
//	return 0;
//}
